{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "73bd968b-d970-4a05-94ef-4e7abf990827",
   "metadata": {},
   "source": [
    "Chapter 06\n",
    "\n",
    "# 矩阵乘法第二视角\n",
    "Book_4《矩阵力量》 | 鸢尾花书：从加减乘除到机器学习 (第二版)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2adcfe9c-3a08-4440-b790-302b7d659727",
   "metadata": {},
   "source": [
    "这段代码演示了如何通过矩阵分块的方式，使用矩阵的列与行的外积来重建矩阵乘积。具体步骤如下：\n",
    "\n",
    "1. **定义绘制函数**：`plot_heatmap`函数用于可视化矩阵，通过`seaborn`的`heatmap`绘制热图，用色彩表示矩阵元素的值。\n",
    "\n",
    "2. **生成随机矩阵 \\( A \\) 和 \\( B \\)**：首先，生成尺寸为 \\(6 \\times 4\\) 的矩阵 \\( A \\) 和 \\(4 \\times 3\\) 的矩阵 \\( B \\)。通过缩放，使矩阵元素的取值范围在 \\([-1, 1]\\) 之间。\n",
    "\n",
    "3. **矩阵乘积 \\( C \\)**：计算矩阵乘积 \\( C = A \\times B \\)，其中 \\( C \\) 的每个元素 \\( C_{ij} \\) 定义为\n",
    "   $$\n",
    "   C_{ij} = \\sum_{k=1}^4 A_{ik} \\cdot B_{kj}\n",
    "   $$\n",
    "   这产生了一个新的 \\(6 \\times 3\\) 的矩阵 \\( C \\)，并对其进行可视化。\n",
    "\n",
    "4. **逐步分块重建矩阵 \\( C \\)**：定义一个与 \\( C \\) 形状相同的零矩阵 \\( C_{\\text{rep}} \\)，逐步累加矩阵分块的乘积来重建 \\( C \\)：\n",
    "   \n",
    "   - 对于每列索引 \\( i \\) (从 0 到 3)，计算 \\( A \\) 的第 \\(i\\) 列和 \\( B \\) 的第 \\(i\\) 行的外积，即：\n",
    "     $$\n",
    "     C_i = A[:, i] \\times B[i, :]\n",
    "     $$\n",
    "     这给出了矩阵 \\( C \\) 中只涉及 \\( A \\) 的第 \\(i\\) 列和 \\( B \\) 的第 \\(i\\) 行的部分贡献矩阵 \\( C_i \\)，即\n",
    "     $$\n",
    "     C_i = \\begin{bmatrix} A_{11} \\cdot B_{i1} & A_{12} \\cdot B_{i2} & \\dots \\end{bmatrix}\n",
    "     $$\n",
    "\n",
    "   - 将 \\( C_i \\) 累加到 \\( C_{\\text{rep}} \\) 中，以逐步重建 \\( C \\)。此累加过程可以用公式表示为\n",
    "     $$\n",
    "     C_{\\text{rep}} = \\sum_{i=1}^4 C_i\n",
    "     $$\n",
    "     \n",
    "5. **可视化重建的矩阵**：最终，通过绘制 \\( C_{\\text{rep}} \\) 验证重建的矩阵是否与 \\( C \\) 相同。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "665a896c-02e8-4bb9-bf81-f27234519a06",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt  # 导入绘图库\n",
    "import numpy as np  # 导入数值计算库\n",
    "import seaborn as sns  # 导入热图绘制库"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "303cd501-c30b-454f-9f9a-c9ea59beeceb",
   "metadata": {},
   "source": [
    "## 定义函数：绘制热图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b85640bf-d669-4673-a1b4-211acca1c267",
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_heatmap(x, title):  # 定义热图绘制函数\n",
    "    fig, ax = plt.subplots()  # 创建子图\n",
    "    ax = sns.heatmap(x,  # 绘制热图\n",
    "                     cmap='RdYlBu_r',  # 选择颜色映射\n",
    "                     cbar_kws={\"orientation\": \"horizontal\"}, vmin=-1, vmax=1)  # 设置颜色条方向和取值范围\n",
    "    ax.set_aspect(\"equal\")  # 设置坐标轴比例\n",
    "    plt.title(title)  # 设置标题"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "66a24219-f8b2-4712-950a-7aa677fdd9e5",
   "metadata": {},
   "source": [
    "## 生成矩阵 A 和 B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "baa441d7-ffd2-43b7-ab0d-815d0f2a6333",
   "metadata": {},
   "outputs": [],
   "source": [
    "A = np.random.randint(0, 40 + 1, size=(6, 4))  # 生成 6x4 矩阵 A，元素为 0 到 40 的随机整数\n",
    "A = A / 20 - 1  # 将矩阵 A 的元素缩放到 -1 到 1 范围内"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "4f2a95ec-161d-43a6-826c-3b1314a9314d",
   "metadata": {},
   "outputs": [],
   "source": [
    "B = np.random.randint(0, 40 + 1, size=(4, 3))  # 生成 4x3 矩阵 B，元素为 0 到 40 的随机整数\n",
    "B = B / 20 - 1  # 将矩阵 B 的元素缩放到 -1 到 1 范围内"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f9494786-223b-4765-b89d-6afdeced536c",
   "metadata": {},
   "source": [
    "## 可视化矩阵 A 和 B"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "69c8c895-6752-473c-b29d-2337e75c663f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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gQMHmlatWpnDhw/79V5Orve1115r7r33Xp+2Fi1aVHiRbIsWLXzaMjIySl1I17dvX58+ffr0se6iyUDmbYwxCxcuNLGxsZVebHhWSUmJad++vRk1atT5lBpUVZn3uW677TZz4403ercv1PU25qeLhLdt21bpe9i43mfJz4tkq+vYDmlA+eKLL8yWLVvM1KlTTe3atc2WLVvMli1bTGFhobdPs2bNzLJly7zbWVlZJj4+3ixbtsxs27bNDB06tMzbjJOTk817771nNm/ebLp3727dbafXXHONyc3NNbm5uaZ169albjs9d97GGFNQUGBq1qxpZs6cWWrM/fv3m6lTp5oNGzaYvLw8s3z5ctO8eXPTtm3bsJ13YWGh+f3vf29ycnJMXl6eWbVqlUlLSzOXX375Bb3eRUVFZsCAASY5Odl88sknPrceejweY4x963329ss5c+aYnTt3mnHjxplatWp571aYOHGiGTFihLf/2VsRH3zwQbNz504zZ86cUrcifvjhhyYyMtJkZWWZXbt2maysLGtvO/V33gsXLjRRUVHmhRdeKPf28ClTppgVK1aYzz77zGzZssWMGjXKREVF+YRcpwU67+nTp5vs7Gyzd+9es337djNx4kQjySxdutTb50Jc77OGDx9uOnbsWOaYtq93YWGh93ezJPPUU0+ZLVu2eO8odPLYDmlASU9PN5JKPVatWvVTAZKZN2+ed7ukpMRMnjzZNGjQwLjdbtO1a9dSqfTUqVNmzJgxpl69eqZGjRqmX79+5sCBA6GcSkC++eYbM2zYMFOnTh1Tp04dM2zYsFK33507b2OMmTVrlqlRo0aZf9fFgQMHTNeuXU29evVMTEyMufLKK83vfve7Un9niJMCnfd3331nevXqZS677DITHR1tGjVqZNLT00ut5YW23nl5eWUeFz8/Nmxc7xdeeME0btzYxMTEmHbt2vmcyUlPTzfdunXz6b969WrTtm1bExMTY5o0aVJm8F6yZIlp1qyZiY6ONs2bN/f5hWaLQObdrVu3Mtc1PT3d22fcuHGmUaNGJiYmxlx22WWmV69eJicnpxpn5J9A5j1t2jRz5ZVXmtjYWHPJJZeY66+/3ixfvrzUmBfaehvzw1neGjVqmJdeeqnM8Wxf77Nnf8r7zDp5bLuM+fHqFgAAAEtY9fegAAAASAQUAABgIQIKAACwDgEFAABYh4ACAACsQ0ABAADWIaAAAADrEFAAAIB1CCgAAMA6BBQAAGAdAgoAALAOAQUAAFjn/wNd6frbGvidSgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_heatmap(A, 'A')  # 可视化矩阵 A"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1e9eeae0-98a7-45c2-b056-e05b9f02afb9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAigAAAGTCAYAAAAC6OmuAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAe5ElEQVR4nO3df5SWZZ0/8M/DMDMgwSjxa8gV6ccKCnEEStQENUM8xx+0e1JTkaz1GyaluWVy2g3tfDdw29XaFMtS0N3FWBewNlc7+BX8NWgKWLKIZrFim0i4CkQy/Jjr+4cx+TAzwMDM3NfA63XOcx7u676e+/l8uOaGt/dzP1hKKaUAAMhIl6ILAADYnYACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACtIk5c+ZEqVQqe/Tt2zdOPfXU+MlPflJ0eUAnI6AAbWr27NmxdOnSqKuri9tvvz0qKirinHPOif/4j/8oujSgE+ladAHAwWXYsGExevToxu0JEybEEUccEffcc0+cc845BVYGdCauoADtqlu3blFVVRWVlZVFlwJ0Iq6gAG1q586dsWPHjkgpxWuvvRbf/OY3Y8uWLXHRRRcVXRrQiQgoQJsaM2ZM2XZ1dXXccsstceaZZxZUEdAZCShAm7r77rtj6NChERGxYcOGWLhwYVx55ZWxc+fOmDp1asHVAZ2FgAK0qaFDhza5Sfbll1+Oa6+9Ni655JI4/PDDiysO6DTcJAu0uw9+8IPx1ltvxYsvvlh0KUAnIaAA7e7ZZ5+NiIi+ffsWWwjQafiIB2hTK1eujB07dkRExOuvvx4LFiyIRYsWxcc//vEYPHhwwdUBnYWAArSpyy67rPHXNTU1MXjw4Ljpppvic5/7XIFVAZ1NKaWUii4CAOCd3IMCAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB3/UBsHpa8/uLroEgo3dHDvokso3Lf+ZlHRJRTqiXsvLroE2G+uoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJCdrkUXwKHtN7/5Tdx2221RV1cX69ati1KpFP3794+TTjoppkyZEn/2Z39WdIkAFMAVFArz+OOPx9ChQ2PhwoUxYsSIuPTSS+OSSy6JESNGxH333RfHHXdcPPHEE0WXCUABXEGhMF/84hfjr/7qr+Lmm29ucf/VV18dTz/99B6PU19fH/X19WVjO7Zti65VVW1WKwAdyxUUCrNy5cqYMmVKi/s/+9nPxsqVK/d6nBkzZkRNTU3Z47F/u70tSwWggwkoFKa2tjbq6upa3L906dKora3d63GmTZsWGzduLHuccv7/actSAehgPuKhMF/60pdiypQpsWzZsvjYxz4W/fv3j1KpFOvWrYtFixbFD37wg/jWt7611+NUV1dHdXV12ZiPdwA6NwGFwnzuc5+Ld7/73XHzzTfH9773vdi5c2dERFRUVMSoUaPi7rvvjvPPP7/gKgEogoBCoS644IK44IILYvv27bFhw4aIiOjTp09UVlYWXBkARRJQyEJlZeU+3W8CwKHBTbIAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgO6WUUiq6CGhr6eVvF11C4Xb+v6eKLqFwFR86tugSClUa/jdFlwD7zRUUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVDI2iuvvBKf/vSn9zinvr4+Nm3aVPaor9/RQRUC0B4EFLL2v//7v3HXXXftcc6MGTOipqam7DFj1qIOqhCA9tC16AI4tP34xz/e4/5f//rXez3GtGnT4pprrikbq1r3/QOqC4BiCSgUauLEiVEqlSKl1OKcUqm0x2NUV1dHdXV12Vh6w482QGfmIx4KVVtbG/Pnz4+GhoZmH8uXLy+6RAAKIKBQqFGjRu0xhOzt6goAByfXwSnUl7/85diyZUuL+9///vfH4sWLO7AiAHIgoFCoU045ZY/7e/ToEePGjeugagDIhY94AIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHa6Fl0AtIdrl51WdAmFO+ULs4ouoXBrHvy/RZdQqKuKLgAOgCsoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAoXBvvfVWPP7447Fq1aom+7Zu3Rp33313AVUBUCQBhUK9+OKLMXTo0Bg7dmwMHz48Tj311Hj11Vcb92/cuDEuu+yyPR6jvr4+Nm3aVPbYsX1be5cOQDsSUCjUV77ylRg+fHisX78+XnjhhejVq1ecfPLJsXbt2n0+xowZM6Kmpqbs8dSCO9qxagDaWymllIougkNX//7946GHHorhw4c3jl155ZXxk5/8JBYvXhw9evSIgQMHxs6dO1s8Rn19fdTX15eNTX/gxehaWdVudXcGp1z6iaJLKNyaBx8ouoRCXfWR9xZdAuy3rkUXwKHtrbfeiq5dy38Mb7311ujSpUuMGzcu5s6du9djVFdXR3V1ddnYoR5OADo7AYVCDRkyJJ555pkYOnRo2fh3vvOdSCnFueeeW1BlABTJPSgU6uMf/3jcc889ze675ZZb4pOf/GT4FBLg0OMeFA5KX17wi6JLKJx7UNyD4h4UOjNXUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2uhZdALSHG3v9oOgSCrf+d08UXULhxle9UnQJwH5yBQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAr3/PPPx+zZs2P16tUREbF69eq44oor4tOf/nQ8/PDDBVcHQBG6Fl0Ah7YHH3wwzjvvvHjXu94Vf/jDH2LhwoVx6aWXxogRIyKlFGeeeWb89Kc/jdNPP73FY9TX10d9fX3ZWOW2nVFdVdHe5QPQTlxBoVBf//rX48tf/nK8/vrrMXv27Ljooovi8ssvj0WLFsVDDz0U1157bcycOXOPx5gxY0bU1NSUPWb+8JkO6gCA9lBKKaWii+DQVVNTE8uWLYv3v//90dDQENXV1fHUU0/FyJEjIyJi5cqVccYZZ8S6detaPEazV1Aen3bIX0FZf/LXii6hcIdXvVJ0CYXqVnF80SXAfvMRD9no0qVLdOvWLQ4//PDGsZ49e8bGjRv3+Lrq6uqorq4uG2s4xMMJQGfnIx4KdfTRR8dLL73UuL106dI46qijGrdfeeWVqK2tLaI0AArkCgqFuuKKK2Lnzp2N28OGDSvb/8ADD+zxBlkADk7uQeGg1PDQF4ouoXDuQXEPintQ6Mx8xAMAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyI6AAANkRUACA7AgoAEB2BBQAIDsCCgCQHQEFAMiOgAIAZEdAAQCyU0oppaKLgINNfX19zJgxI6ZNmxbV1dVFl9PhDvX+I/wewIESUKAdbNq0KWpqamLjxo3Rq1evosvpcId6/xF+D+BA+YgHAMiOgAIAZEdAAQCyI6BAO6iuro7p06cfsjdHHur9R/g9gAPlJlkAIDuuoAAA2RFQAIDsCCgAQHYEFAAgOwIKtLFZs2bF4MGDo1u3bjFq1Kh47LHHii6pwzz66KNxzjnnxMCBA6NUKsV9991XdEkdbsaMGfGhD30oevbsGf369YuJEyfGCy+8UHRZ0OkIKNCG5s2bF1dffXV89atfjRUrVsQpp5wSZ511Vqxdu7bo0jrEli1bYsSIEXHLLbcUXUphHnnkkbjyyivjySefjEWLFsWOHTti/PjxsWXLlqJLg07F14yhDZ1wwgkxcuTIuO222xrHhg4dGhMnTowZM2YUWFnHK5VKsXDhwpg4cWLRpRTqd7/7XfTr1y8eeeSRGDt2bNHlQKfhCgq0kW3btsWyZcti/PjxZePjx4+Purq6gqqiaBs3boyIiN69exdcCXQuAgq0kQ0bNsTOnTujf//+ZeP9+/ePdevWFVQVRUopxTXXXBMf+chHYtiwYUWXA51K16ILgINNqVQq204pNRnj0DB16tT4xS9+EY8//njRpUCnI6BAG+nTp09UVFQ0uVqyfv36JldVOPh9/vOfjx//+Mfx6KOPxpFHHll0OdDp+IgH2khVVVWMGjUqFi1aVDa+aNGiOOmkkwqqio6WUoqpU6fGggUL4uGHH47BgwcXXRJ0Sq6gQBu65pprYtKkSTF69Og48cQT4/bbb4+1a9fGlClTii6tQ/z+97+Pl156qXF7zZo18eyzz0bv3r3jqKOOKrCyjnPllVfG3Llz40c/+lH07Nmz8YpaTU1NdO/eveDqoPPwNWNoY7NmzYq///u/j1dffTWGDRsWN9988yHz9dIlS5bEaaed1mR88uTJMWfOnI4vqAAt3W80e/bs+NSnPtWxxUAnJqAAANlxDwoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkJ2uRb75yBNmRUREqUvp7eeKt5+jS5ey7dbu37UdFV0at/d6rH04xp7fs8sfD1cqey5VlJqM/en5j6+p2O01Lc2vaP71Tea/Y16Telp4zybPpfLtir3s/9PzH3/bSs303cJrKvZ6zL3U1OR17xjbtcyl3ebuWt59nLevx+tSKjWZU7Gfxy5Fw9vPpbefu8TOsu3m9re0r/TH13bZy/4/Hav1x9n9GKX09nM0eU7l2w0tzdt9f2p2f0oNzRyj+bktv1fa8/6Glp7THvY1M7eZ8dTiezQ/v+y5la9JO1P5vD9up922Y2dD8+N/3E4739F3i8fYfXwfjllWW/PzU0NqnLtrX8Nu22m3ftNu79H4uhbGm87/0/H2+tq9HKuh8fXR/PMelnBff9RS2st77MeP6u5zLkovRHtzBQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJAdAQUAyI6AAgBkR0ABALIjoAAA2RFQAIDsCCgAQHYEFAAgOwIKAJCfVJCtW7em6dOnp61btxZVQiH0re9Dgb71fSjQd/v2XUoppSKC0aZNm6KmpiY2btwYvXr1KqKEQuhb34cCfev7UKDv9u3bRzwAQHYEFAAgOwIKAJCdwgJKdXV1TJ8+Paqrq4sqoRD61vehQN/6PhTou337LuwmWQCAlviIBwDIjoACAGRHQAEAsiOgAADZadeA8nd/93dx0kknxWGHHRaHH374Pr0mpRTXX399DBw4MLp37x6nnnpq/Nd//VfZnPr6+vj85z8fffr0iR49esS5554bv/nNb9qhg/3zxhtvxKRJk6KmpiZqampi0qRJ8eabb+7xNaVSqdnHN7/5zcY5p556apP9F154YTt3s+/2p+9PfepTTXoaM2ZM2ZyDbb23b98eX/nKV2L48OHRo0ePGDhwYFx66aXx29/+tmxebus9a9asGDx4cHTr1i1GjRoVjz322B7nP/LIIzFq1Kjo1q1bvPe9743vfve7TebMnz8/jj322Kiuro5jjz02Fi5c2F7l77fW9L1gwYL42Mc+Fn379o1evXrFiSeeGD/96U/L5syZM6fZc33r1q3t3UqrtKbvJUuWNNvT6tWry+YdbOvd3J9fpVIpjjvuuMY5ua/3o48+Guecc04MHDgwSqVS3HfffXt9TYed2+357+h/7WtfSzfddFO65pprUk1NzT69ZubMmalnz55p/vz56bnnnksXXHBBqq2tTZs2bWqcM2XKlPSe97wnLVq0KC1fvjyddtppacSIEWnHjh3t1EnrTJgwIQ0bNizV1dWlurq6NGzYsHT22Wfv8TWvvvpq2ePOO+9MpVIp/epXv2qcM27cuHT55ZeXzXvzzTfbu519tj99T548OU2YMKGsp9dff71szsG23m+++WY644wz0rx589Lq1avT0qVL0wknnJBGjRpVNi+n9f7hD3+YKisr0/e///20atWqdNVVV6UePXqkl19+udn5v/71r9Nhhx2WrrrqqrRq1ar0/e9/P1VWVqZ///d/b5xTV1eXKioq0je+8Y30/PPPp2984xupa9eu6cknn+yotvaqtX1fddVV6cYbb0w/+9nP0osvvpimTZuWKisr0/LlyxvnzJ49O/Xq1avJOZ+T1va9ePHiFBHphRdeKOvpnefowbjeb775Zlm/r7zySurdu3eaPn1645zc1/s///M/01e/+tU0f/78FBFp4cKFe5zfked2h/zPAmfPnr1PAaWhoSENGDAgzZw5s3Fs69atqaamJn33u99NKb39A1FZWZl++MMfNs75n//5n9SlS5f04IMPtnntrbVq1aoUEWULsXTp0hQRafXq1ft8nPPOOy+dfvrpZWPjxo1LV111VVuV2qb2t+/Jkyen8847r8X9h8p6/+xnP0sRUfYHYU7r/eEPfzhNmTKlbGzIkCHpuuuua3b+tddem4YMGVI29tnPfjaNGTOmcfv8889PEyZMKJtz5plnpgsvvLCNqj5wre27Occee2y64YYbGrf39c/DIrW2710B5Y033mjxmIfCei9cuDCVSqX03//9341jnWG9d9mXgNKR53ZW96CsWbMm1q1bF+PHj28cq66ujnHjxkVdXV1ERCxbtiy2b99eNmfgwIExbNiwxjlFWrp0adTU1MQJJ5zQODZmzJioqanZ5/pee+21uP/+++Mzn/lMk33/+q//Gn369InjjjsuvvSlL8XmzZvbrPYDcSB9L1myJPr16xd//ud/HpdffnmsX7++cd+hsN4RERs3boxSqdTko9Ac1nvbtm2xbNmysjWIiBg/fnyLPS5durTJ/DPPPDOeeeaZ2L59+x7n5LCuEfvX9+4aGhpi8+bN0bt377Lx3//+9zFo0KA48sgj4+yzz44VK1a0Wd0H6kD6Pv7446O2tjY++tGPxuLFi8v2HQrrfccdd8QZZ5wRgwYNKhvPeb1bqyPP7a4HVmrbWrduXURE9O/fv2y8f//+8fLLLzfOqaqqiiOOOKLJnF2vL9K6deuiX79+Tcb79eu3z/Xddddd0bNnz/iLv/iLsvGLL744Bg8eHAMGDIiVK1fGtGnT4uc//3ksWrSoTWo/EPvb91lnnRWf+MQnYtCgQbFmzZr427/92zj99NNj2bJlUV1dfUis99atW+O6666Liy66qOz/DJrLem/YsCF27tzZ7HnZUo/r1q1rdv6OHTtiw4YNUVtb2+KcHNY1Yv/63t0//uM/xpYtW+L8889vHBsyZEjMmTMnhg8fHps2bYpvf/vbcfLJJ8fPf/7z+MAHPtCmPeyP/em7trY2br/99hg1alTU19fHP//zP8dHP/rRWLJkSYwdOzYiWv6ZOFjW+9VXX40HHngg5s6dWzae+3q3Vkee260OKNdff33ccMMNe5zz9NNPx+jRo1t76EalUqlsO6XUZGx3+zLnQOxr3xFN649oXX133nlnXHzxxdGtW7ey8csvv7zx18OGDYsPfOADMXr06Fi+fHmMHDlyn47dWu3d9wUXXND462HDhsXo0aNj0KBBcf/99zcJaK057oHqqPXevn17XHjhhdHQ0BCzZs0q21fEeu9Ja8/L5ubvPr4/53pH298a77nnnrj++uvjRz/6UVmIHTNmTNmN4CeffHKMHDkyvvOd78Q//dM/tV3hB6g1fR9zzDFxzDHHNG6feOKJ8corr8Q//MM/NAaU1h6zKPtb45w5c+Lwww+PiRMnlo13lvVujY46t1sdUKZOnbrXbxIcffTRrT1sREQMGDAgIt5OaLW1tY3j69evb0xjAwYMiG3btsUbb7xR9l/V69evj5NOOmm/3ndf7Gvfv/jFL+K1115rsu93v/tdk0TZnMceeyxeeOGFmDdv3l7njhw5MiorK+OXv/xlu/2F1VF971JbWxuDBg2KX/7ylxFxcK/39u3b4/zzz481a9bEww8/XHb1pDkdsd7N6dOnT1RUVDT5r593npe7GzBgQLPzu3btGu9+97v3OKc1Py/taX/63mXevHnxmc98Ju69994444wz9ji3S5cu8aEPfajxZ75oB9L3O40ZMyb+5V/+pXH7YF7vlFLceeedMWnSpKiqqtrj3NzWu7U69Nxu1R0r+6m1N8neeOONjWP19fXN3iQ7b968xjm//e1vs7tp8qmnnmoce/LJJ/f5psnJkyc3+TZHS5577rkUEemRRx7Z73rbyoH2vcuGDRtSdXV1uuuuu1JKB+96b9u2LU2cODEdd9xxaf369fv0XkWu94c//OF0xRVXlI0NHTp0jzfJDh06tGxsypQpTW6kO+uss8rmTJgwIbubJlvTd0opzZ07N3Xr1m2vNxvu0tDQkEaPHp0uu+yyAym1Te1P37v7y7/8y3Taaac1bh+s653Sn24Sfu655/b6Hjmu9y6xjzfJdtS53a4B5eWXX04rVqxIN9xwQ3rXu96VVqxYkVasWJE2b97cOOeYY45JCxYsaNyeOXNmqqmpSQsWLEjPPfdc+uQnP9ns14yPPPLI9NBDD6Xly5en008/PbuvnX7wgx9MS5cuTUuXLk3Dhw9v8rXT3ftOKaWNGzemww47LN12221NjvnSSy+lG264IT399NNpzZo16f77709DhgxJxx9/fKfte/Pmzemv//qvU11dXVqzZk1avHhxOvHEE9N73vOeg3q9t2/fns4999x05JFHpmeffbbsq4f19fUppfzWe9fXL++44460atWqdPXVV6cePXo0flvhuuuuS5MmTWqcv+uriF/84hfTqlWr0h133NHkq4hPPPFEqqioSDNnzkzPP/98mjlzZrZfO93XvufOnZu6du2abr311ha/Hn799denBx98MP3qV79KK1asSJdddlnq2rVrWcgtWmv7vvnmm9PChQvTiy++mFauXJmuu+66FBFp/vz5jXMOxvXe5ZJLLkknnHBCs8fMfb03b97c+HdzRKSbbroprVixovEbhUWe2+0aUCZPnpwioslj8eLFfyogIs2ePbtxu6GhIU2fPj0NGDAgVVdXp7FjxzZJpW+99VaaOnVq6t27d+revXs6++yz09q1a9uzlVZ5/fXX08UXX5x69uyZevbsmS6++OImX7/bve+UUvre976Xunfv3uy/dbF27do0duzY1Lt371RVVZXe9773pS984QtN/s2QIrW27z/84Q9p/PjxqW/fvqmysjIdddRRafLkyU3W8mBb7zVr1jR7Xrzz3MhxvW+99dY0aNCgVFVVlUaOHFl2JWfy5Mlp3LhxZfOXLFmSjj/++FRVVZWOPvroZoP3vffem4455phUWVmZhgwZUvYXWi5a0/e4ceOaXdfJkyc3zrn66qvTUUcdlaqqqlLfvn3T+PHjU11dXQd2tG9a0/eNN96Y3ve+96Vu3bqlI444In3kIx9J999/f5NjHmzrndLbV3m7d++ebr/99maPl/t677r609LPbJHndimlP97dAgCQiaz+HRQAgAgBBQDIkIACAGRHQAEAsiOgAADZEVAAgOwIKABAdgQUACA7AgoAkB0BBQDIjoACAGRHQAEAsvP/AVP3nDfZh8nUAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_heatmap(B, 'B')  # 可视化矩阵 B"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "803b707c-3404-4b9b-bcb7-5dfb072dd1f8",
   "metadata": {},
   "source": [
    "## 可视化矩阵乘积 C = AB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "272817b2-c04f-4dbc-b4c6-183ae204510b",
   "metadata": {},
   "outputs": [],
   "source": [
    "C = A @ B  # 计算矩阵 C 为 A 和 B 的乘积"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "2b9a7a76-8c91-41e7-a196-2c7bef04875a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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NWqoTJkyuvPOO/X111/79PF4PHriiScUGRmpcuXKqVevXjpy5EgRzKBwTp06pUGDBikiIkIREREaNGiQTp8+necxLpcrx9dLL73k7XPnnXdm29+/f/8ino3/CjPvwYMHZ5tTq1atfPqUtvXOyMjQn/70JzVu3FjlypVTjRo19PDDD+v777/36Wfbek+dOlV169ZVeHi44uLi9Mknn+TZf8OGDYqLi1N4eLh+97vf6Z133snWZ/HixWrYsKHcbrcaNmyopUuXFlX5hVaQeS9ZskRdunRR1apVVbFiRbVu3Vr/+c9/fPrMnTs3x3P9woULRT2VAinIvNevX5/jnPbu3evTr7Std05/frlcLjVq1Mjbx/b13rhxo3r27KkaNWrI5XJp2bJl+R5TbOd2Uf4e/b/+9a/mlVdeMaNHjzYRERF+HZOYmGgqVKhgFi9ebHbu3Gn69etnoqOjzZkzZ7x9hg0bZm688UazevVqs3XrVnPXXXeZJk2amEuXLhXRTAqmW7duJjY21iQnJ5vk5GQTGxtrevTokecxR48e9XnNnj3buFwu880333j7dOjQwQwdOtSn3+nTp4t6On4rzLzj4+NNt27dfOZ08uRJnz6lbb1Pnz5tOnfubBYsWGD27t1rUlJSTMuWLU1cXJxPP5vWe/78+SY0NNTMmDHD7N692zz11FOmXLly5rvvvsux/7fffmvKli1rnnrqKbN7924zY8YMExoaahYtWuTtk5ycbIKDg82kSZPMnj17zKRJk0xISIjZtGlTcU0rXwWd91NPPWUmT55svvjiC7N//34zbtw4ExoaarZu3ertM2fOHFOxYsVs57xNCjrvdevWGUlm3759PnP67TlaGtf79OnTPvM9fPiwqVKlihk/fry3j+3r/dFHH5nnn3/eLF682EgyS5cuzbN/cZ7bxfI/C5wzZ45fASUrK8tUr17dJCYmetsuXLhgIiIizDvvvGOM+eUHIjQ01MyfP9/b53//+58JCgoyq1atuu61F9Tu3buNJJ+FSElJMZLM3r17/R7n3nvvNR07dvRp69Chg3nqqaeuV6nXVWHnHR8fb+69995c9wfKen/xxRdGks8fhDat9+23326GDRvm0xYTE2PGjh2bY//nnnvOxMTE+LQ99thjplWrVt7tvn37mm7duvn0ufvuu03//v2vU9XXrqDzzknDhg3NxIkTvdv+/nnopILO+0pAOXXqVK5jBsJ6L1261LhcLvPf//7X21YS1vsKfwJKcZ7bVt2DkpqaqrS0NHXt2tXb5na71aFDByUnJ0uStmzZooyMDJ8+NWrUUGxsrLePk1JSUhQREaGWLVt621q1aqWIiAi/6/vhhx+0cuVKPfroo9n2vffee4qMjFSjRo00ZswYnT179rrVfi2uZd7r169XtWrVdMstt2jo0KE6duyYd18grLckpaeny+VyZfsq1Ib1vnjxorZs2eKzBpLUtWvXXOeYkpKSrf/dd9+tzZs3KyMjI88+NqyrVLh5Xy0rK0tnz55VlSpVfNp/+ukn1alTRzVr1lSPHj20bdu261b3tbqWeTdt2lTR0dHq1KmT1q1b57MvENZ71qxZ6ty5s+rUqePTbvN6F1Rxntsh11bq9ZWWliZJioqK8mmPiorSd9995+0TFhamypUrZ+tz5XgnpaWlqVq1atnaq1Wr5nd9SUlJqlChgv7whz/4tA8cOFB169ZV9erVtWvXLo0bN047duzQ6tWrr0vt16Kw8+7evbseeOAB1alTR6mpqfrLX/6ijh07asuWLXK73QGx3hcuXNDYsWP14IMP+vyfQW1Z7xMnTigzMzPH8zK3OaalpeXY/9KlSzpx4oSio6Nz7WPDukqFm/fVXn75ZZ07d059+/b1tsXExGju3Llq3Lixzpw5o9dee0133HGHduzYoZtvvvm6zqEwCjPv6OhoTZ8+XXFxcfJ4PPrXv/6lTp06af369Wrfvr2k3H8mSst6Hz16VB9//LHmzZvn0277ehdUcZ7bBQ4oEyZM0MSJE/Ps8+WXX6p58+YFHdrL5XL5bBtjsrVdzZ8+18LfeUvZ65cKVt/s2bM1cOBAhYeH+7QPHTrU+8+xsbG6+eab1bx5c23dulXNmjXza+yCKup59+vXz/vPsbGxat68uerUqaOVK1dmC2gFGfdaFdd6Z2RkqH///srKytLUqVN99jmx3nkp6HmZU/+r2wtzrhe3wtb4/vvva8KECVq+fLlPiG3VqpXPjeB33HGHmjVrpjfeeEOvv/769Sv8GhVk3vXr11f9+vW9261bt9bhw4f1z3/+0xtQCjqmUwpb49y5c1WpUiX17t3bp72krHdBFNe5XeCAMnLkyHyfJLjpppsKOqwkqXr16pJ+SWjR0dHe9mPHjnnTWPXq1XXx4kWdOnXK57+qjx07pjZt2hTqc/3h77y/+uor/fDDD9n2HT9+PFuizMknn3yiffv2acGCBfn2bdasmUJDQ3XgwIEi+wuruOZ9RXR0tOrUqaMDBw5IKt3rnZGRob59+yo1NVVr1671uXqSk+JY75xERkYqODg423/9/Pa8vFr16tVz7B8SEqIbbrghzz4F+XkpSoWZ9xULFizQo48+qoULF6pz58559g0KClKLFi28P/NOu5Z5/1arVq3073//27tdmtfbGKPZs2dr0KBBCgsLy7OvbetdUMV6bhfojpVCKuhNspMnT/a2eTyeHG+SXbBggbfP999/b91Nk59//rm3bdOmTX7fNBkfH5/taY7c7Ny500gyGzZsKHS918u1zvuKEydOGLfbbZKSkowxpXe9L168aHr37m0aNWpkjh075tdnObnet99+uxk+fLhPW4MGDfK8SbZBgwY+bcOGDct2I1337t19+nTr1s26myYLMm9jjJk3b54JDw/P92bDK7Kyskzz5s3NkCFDrqXU66ow877a/fffb+666y7vdmldb2N+vUl4586d+X6Gjet9hfy8Sba4zu0iDSjfffed2bZtm5k4caIpX7682bZtm9m2bZs5e/ast0/9+vXNkiVLvNuJiYkmIiLCLFmyxOzcudMMGDAgx8eMa9asadasWWO2bt1qOnbsaN1jp7feeqtJSUkxKSkppnHjxtkeO7163sYYk56ebsqWLWvefvvtbGMePHjQTJw40Xz55ZcmNTXVrFy50sTExJimTZuW2HmfPXvWPPPMMyY5OdmkpqaadevWmdatW5sbb7yxVK93RkaG6dWrl6lZs6bZvn27z6OHHo/HGGPfel95/HLWrFlm9+7dZtSoUaZcuXLepxXGjh1rBg0a5O1/5VHEp59+2uzevdvMmjUr26OIn332mQkODjaJiYlmz549JjEx0drHTv2d97x580xISIh56623cn08fMKECWbVqlXmm2++Mdu2bTNDhgwxISEhPiHXaQWd95QpU8zSpUvN/v37za5du8zYsWONJLN48WJvn9K43lc89NBDpmXLljmOaft6nz171vt3syTzyiuvmG3btnmfKHTy3C7SgBIfH28kZXutW7fu1wIkM2fOHO92VlaWGT9+vKlevbpxu92mffv22VLp+fPnzciRI02VKlVMmTJlTI8ePcyhQ4eKcioFcvLkSTNw4EBToUIFU6FCBTNw4MBsj99dPW9jjJk2bZopU6ZMjr/r4tChQ6Z9+/amSpUqJiwszNSrV888+eST2X5niJMKOu+ff/7ZdO3a1VStWtWEhoaa2rVrm/j4+GxrWdrWOzU1Ncfz4rfnho3r/dZbb5k6deqYsLAw06xZM58rOfHx8aZDhw4+/devX2+aNm1qwsLCzE033ZRj8F64cKGpX7++CQ0NNTExMT5/odmiIPPu0KFDjusaHx/v7TNq1ChTu3ZtExYWZqpWrWq6du1qkpOTi3FG/inIvCdPnmzq1atnwsPDTeXKlU3btm3NypUrs41Z2tbbmF+u8pYpU8ZMnz49x/FsX+8rV39y+5l18tx2GXP57hYAAABLWPV7UAAAACQCCgAAsBABBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACs8/8BxTN1OBUXtHsAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_heatmap(C, 'C = AB')  # 可视化矩阵 C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4bc72b08-ffad-43b2-97a7-ae390aa508f9",
   "metadata": {},
   "outputs": [],
   "source": [
    "C_rep = np.zeros_like(C)  # 创建与 C 形状相同的零矩阵，用于存储逐步计算的结果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d78c5bb3-fdb6-4831-97e4-e87eb90818fc",
   "metadata": {},
   "source": [
    "## 逐元素重建矩阵 C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a622e1fd-5c85-4a3e-80c3-5c5b38618b0d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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vHlKS0uT1+vVX/7yF/Xv3185OTnq06ePpIq/J+rKeh8+fFjvvvuuFi9e7Ndu+3qH63Ke22EHlOnTp2vGjBmV9tm0aZO6desW7tA+LpfLb9sYE9B2oVD6XIxQ5y0F1i+FV99rr72mESNGKD4+3q99zJgxvj+npKTouuuuU7du3bR582alpqaGNHa4anrew4cP9/05JSVF3bp1U+vWrbVq1aqAgBbOuBfrcq13aWmp7rrrLpWXl2vOnDl++5xY78qEe14G639he3XO9cutujW+8cYbmj59ut566y2/ENujRw+/B8Fvuukmpaam6vnnn9ef//znS1f4RQpn3u3atVO7du182z179tTBgwf19NNP+wJKuGM6pbo1Lly4UE2aNNHQoUP92mvLeofjcp3bYQeUCRMmVPlJgjZt2oQ7rCSpefPmkr5LaMnJyb72I0eO+NJY8+bNVVJSouPHj/v9X/WRI0fUq1evan3dUIQ6761bt+rLL78M2Hf06NGARBnMBx98oN27d2vp0qVV9k1NTVVsbKz27t1bY39hXa55n5ecnKzWrVtr7969kur2epeWlmrYsGEqLCzU2rVr/a6eBHM51juYhIQERUdHB/zfzw/Pyws1b948aP+YmBhdeeWVlfYJ5/ulJlVn3uctXbpU9913n958800NGDCg0r5RUVG64YYbfN/zTruYef9Qjx499Ne//tW3XZfX2xij1157TaNGjVJcXFylfW1b73Bd1nM7rCdWqinch2RnzZrla/N6vUEfkl26dKmvzxdffGHdQ5MbN270tW3YsCHkhyYzMzMDPs1RkW3bthlJZt26ddWu91K52Hmfd+zYMeN2u82iRYuMMXV3vUtKSszQoUNNp06dzJEjR0L6Wk6u94033mjGjRvn19ahQ4dKH5Lt0KGDX9vYsWMDHqS77bbb/PoMGjTIuocmw5m3McYsXrzYxMfHV/mw4Xnl5eWmW7duZvTo0RdT6iVVnXlf6Oc//7np27evb7uurrcx3z8kvG3btiq/ho3rfZ5CfEj2cp3bNRpQ9u/fbwoKCsyMGTNMw4YNTUFBgSkoKDCnTp3y9WnXrp1Zvny5b3vmzJnG4/GY5cuXm23btpm777476MeMW7Zsad577z2zefNm069fP+s+dvrjH//Y5OXlmby8PNO5c+eAj51eOG9jjCkuLjb169c3c+fODRhz3759ZsaMGWbTpk2msLDQrFq1yrRv39507dq11s771KlT5je/+Y3Jzc01hYWFJjs72/Ts2dNcddVVdXq9S0tLzZAhQ0zLli3NJ5984vfRQ6/Xa4yxb73Pf/zy1VdfNTt27DCTJk0yDRo08H1aYcqUKWbUqFG+/uc/ivjwww+bHTt2mFdffTXgo4gffvihiY6ONjNnzjQ7d+40M2fOtPZjp6HOe/HixSYmJsa8+OKLFX48fPr06Wb16tXm008/NQUFBWb06NEmJibGL+Q6Ldx5z54926xYscLs2bPHbN++3UyZMsVIMsuWLfP1qYvrfd7IkSNN9+7dg45p+3qfOnXK93ezJPPMM8+YgoIC3ycKnTy3azSgZGZmGkkBr+zs7O8LkMyCBQt82+Xl5WbatGmmefPmxu12mz59+gSk0m+//dZMmDDBNG3a1NSrV8/cfvvt5sCBAzU5lbB89dVXZsSIEaZRo0amUaNGZsSIEQEfv7tw3sYY8/LLL5t69eoF/V0XBw4cMH369DFNmzY1cXFx5pprrjG//vWvA35niJPCnfc333xjMjIyTGJioomNjTWtWrUymZmZAWtZ19a7sLAw6Hnxw3PDxvV+8cUXTevWrU1cXJxJTU31u5KTmZlp0tPT/frn5OSYrl27mri4ONOmTZugwfvNN9807dq1M7GxsaZ9+/Z+f6HZIpx5p6enB13XzMxMX59JkyaZVq1ambi4OJOYmGgyMjJMbm7uZZxRaMKZ96xZs8w111xj4uPjzRVXXGFuvvlms2rVqoAx69p6G/PdVd569eqZefPmBR3P9vU+f/Wnou9ZJ89tlzHnnm4BAACwhFW/BwUAAEAioAAAAAsRUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOv8fUVbch8ia6oUAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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jXTDhw/36zNs2DDrNk1WZd7GGLN8+XITGxtb6WbD80pLS02PHj3MhAkTLqbUGlWdeV/oF7/4hbnxxht9x/V1vY35YZPwjh07Kv0aNq73eQpyk2xtXdshDSiff/65yc3NNXPmzDGNGzc2ubm5Jjc315w8edLXp0OHDmbVqlW+47lz5xqPx2NWrVplduzYYcaOHVvmx4xbt25t3n33XbNt2zYzaNAg6z52eu2115rs7GyTnZ1tunTpEvCx0wvnbYwxhYWFpmHDhubZZ58NGHP//v1mzpw5ZsuWLSYvL8+sWbPGJCUlmW7dutXZeZ88edL85je/MVlZWSYvL8+sX7/e9OnTx1x22WX1er2Li4vNyJEjTevWrc1HH33k99FDr9drjLFvvc9//PLFF180u3btMg8++KBp1KiR79MKM2bMMOPHj/f1P/9RxIceesjs2rXLvPjiiwEfRfzPf/5jIiMjzdy5c83u3bvN3Llzrf3YabDzXr58uYmKijLPPPNMuR8Pnz17tlm7dq359NNPTW5urpkwYYKJioryC7lOq+q8FyxYYFavXm327t1rdu7caWbMmGEkmZUrV/r61Mf1Pu/OO+80vXr1KnNM29f75MmTvj+bJZn58+eb3Nxc3ycKnby2QxpQ0tLSjKSAx/r1638oQDJLlizxHZeWlppZs2aZVq1aGbfbbQYMGBCQSr/77jszZcoU07x5c9OgQQMzYsQIc+DAgVBOpUq++eYbM27cONOkSRPTpEkTM27cuICP3104b2OMef75502DBg3K/F0XBw4cMAMGDDDNmzc3MTEx5sorrzS//vWvA35niJOqOu/Tp0+b1NRU06JFCxMdHW3atm1r0tLSAtayvq13Xl5emdfFj68NG9f7mWeeMe3atTMxMTGme/fufndy0tLSzMCBA/36b9iwwXTr1s3ExMSYyy+/vMzg/eqrr5oOHTqY6Ohok5SU5PcHmi2qMu+BAweWua5paWm+Pg8++KBp27atiYmJMS1atDCpqakmKyurFmcUnKrMe968eebKK680sbGx5pJLLjH9+vUza9asCRizvq23Md/f5W3QoIFZtGhRmePZvt7n7/6U9z3r5LXtMubc7hYAAABLWPV7UAAAACQCCgAAsBABBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABYh4ACAACs8/8BG0YvDjN/Sh4AAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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DRpkkpOTTXZ2tsnOzjbJyclm8ODBlR6zf/9+n9fChQuNy+UyX375pbdPr169zIQJE3z6HT16tKan47fqzDs1NdUMGjTIZ06HDx/26VPf1vvo0aOmf//+ZtmyZWbnzp0mJyfHdOnSxaSkpPj0s2m933jjDRMeHm4WLFhgtm/fbqZMmWKioqLM119/XW7/r776yjRs2NBMmTLFbN++3SxYsMCEh4ebf/3rX94+2dnZJjQ01Dz22GNmx44d5rHHHjNhYWFmw4YNtTWtKgU67ylTppjZs2ebTz/91Ozevdukp6eb8PBws2nTJm+fRYsWmZiYmDLnvE0CnXdWVpaRZHbt2uUzp3PP0fq43kePHvWZ7759+0zjxo3NjBkzvH1sX+9///vf5qGHHjLLly83kszKlSsr7V+b53at/M8CFy1a5FdAKS0tNc2aNTOZmZnetpMnT5rY2Fjz4osvGmN++YYIDw83b7zxhrfPt99+a0JCQsyaNWsueu2B2r59u5HksxA5OTlGktm5c6ff49xyyy2mb9++Pm29evUyU6ZMuVilXlTVnXdqaqq55ZZbKtwfLOv96aefGkk+PwhtWu/rr7/epKWl+bQlJiaa6dOnl9v/gQceMImJiT5tEydONF27dvVuDx8+3AwaNMinz0033WRGjhx5kaq+cIHOuzxJSUlm1qxZ3m1/fx46KdB5nw0oR44cqXDMYFjvlStXGpfLZf773/962+rCep/lT0CpzXPbqmdQ8vPzVVhYqIEDB3rb3G63evXqpezsbElSbm6uiouLffo0b95cycnJ3j5OysnJUWxsrLp06eJt69q1q2JjY/2u7/vvv9fq1at15513ltn32muvKS4uTu3atdN9992n48ePX7TaL8SFzHvdunVq2rSprr32Wk2YMEEHDhzw7guG9ZakoqIiuVyuMrdCbVjvU6dOKTc312cNJGngwIEVzjEnJ6dM/5tuukkbN25UcXFxpX1sWFepevM+X2lpqY4fP67GjRv7tP/4449q1aqVWrRoocGDBysvL++i1X2hLmTeHTt2VEJCgvr166esrCyffcGw3i+//LL69++vVq1a+bTbvN6Bqs1zO+zCSr24CgsLJUnx8fE+7fHx8fr666+9fSIiInTppZeW6XP2eCcVFhaqadOmZdqbNm3qd31LlixRdHS0/vCHP/i0jxkzRq1bt1azZs20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",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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dDN8+HC/OR0/ftyvT31b75MnT5qhQ4ealStXmj179picnBzTs2dPk5qa6tfPpvVesWKFiY6ONosWLTK7du0ykydPNnFxcebzzz8vt/+nn35qGjZsaCZPnmx27dplFi1aZKKjo83rr7/u65OdnW0iIyPNk08+aXbv3m2efPJJExUVZbZu3Vpb06pSqPOePHmymTNnjnn//ffNvn37zPTp0010dLTZvn27r8+SJUtMfHx8wDlvk1DnvWHDBiPJ7N27129OPz5H6+N6nzx50m++hw4dMk2bNjUzZszw9bF9vf/1r3+Zxx9/3KxatcpIMmvWrKm0f22e27XyjwUuWbIkqIBSVlZmmjdvbmbPnu1rO3v2rPF4POaFF14wxnz/DREdHW1WrFjh6/PFF1+YiIgIs27dustee6h27dplJPktRE5OjpFk9uzZE/Q4t956qxk8eLBf24ABA8zkyZMvV6mXVXXnnZ6ebm699dYK94fLer///vtGkt8PQpvW+4YbbjAZGRl+bR06dDDTpk0rt//vfvc706FDB7+2Bx54wPTq1cu3PXr0aDN8+HC/PjfddJO56667LlPVly7UeZenU6dOZtasWb7tYH8eOinUeV8IKCdOnKhwzHBY7zVr1hiXy2U+++wzX1tdWO8LggkotXluW/UMSn5+vgoKCpSWluZrc7vdGjBggLKzsyVJubm5Kikp8evTokULJScn+/o4KScnRx6PRz179vS19erVSx6PJ+j6vvrqK61du1b3339/wL5//OMfSkhIUOfOnTV16lSdPn36stV+KS5l3hs3blSzZs10/fXXa/z48SosLPTtC4f1lqSioiK5XK6AW6E2rHdxcbFyc3P91kCS0tLSKpxjTk5OQP+bbrpJH3zwgUpKSirtY8O6StWb98XKysp0+vRpNW3a1K/9m2++UZs2bdSyZUvdfPPNysvLu2x1X6pLmXfXrl2VlJSkIUOGaMOGDX77wmG9X3rpJQ0dOlRt2rTxa7d5vUNVm+d21KWVenkVFBRIkhITE/3aExMT9fnnn/v6xMTEqEmTJgF9LhzvpIKCAjVr1iygvVmzZkHXt2zZMjVq1Ei33367X/uYMWPUrl07NW/eXDt37tT06dP10UcfKSsr67LUfimqO+8RI0boF7/4hdq0aaP8/Hz94Q9/0ODBg5Wbmyu32x0W63327FlNmzZN99xzj9+/DGrLeh87dkylpaXlnpcVzbGgoKDc/ufOndOxY8eUlJRUYR8b1lWq3rwv9pe//EVnzpzR6NGjfW0dOnTQ0qVLlZKSolOnTunZZ59V37599dFHH+m66667rHOojurMOykpSQsXLlRqaqq8Xq/+9re/aciQIdq4caP69+8vqeLvifqy3keOHNHbb7+t5cuX+7Xbvt6hqs1zO+SAMnPmTM2aNavSPtu2bVP37t1DHdrH5XL5bRtjAtouFkyfSxHsvKXA+qXQ6nv55Zc1ZswYxcbG+rWPHz/e99/Jycm67rrr1L17d23fvl3dunULauxQ1fS877zzTt9/Jycnq3v37mrTpo3Wrl0bENBCGfdS1dZ6l5SU6K677lJZWZnmz5/vt8+J9a5MqOdlef0vbq/OuV7bqlvjq6++qpkzZ+rNN9/0C7G9evXyexC8b9++6tatm5577jn99a9/vXyFX6JQ5t2+fXu1b9/et927d28dOnRIf/7zn30BJdQxnVLdGpcuXarGjRtr1KhRfu11Zb1DUVvndsgBZdKkSVV+kqBt27ahDitJat68uaTvE1pSUpKvvbCw0JfGmjdvruLiYp04ccLvb9WFhYXq06dPtb5uMIKd98cff6yvvvoqYN/Ro0cDEmV5Nm/erL1792rlypVV9u3WrZuio6O1f//+GvsDq7bmfUFSUpLatGmj/fv3S6rf611SUqLRo0crPz9f69ev97t6Up7aWO/yJCQkKDIyMuBvPz8+Ly/WvHnzcvtHRUXpyiuvrLRPKN8vNak6875g5cqVuv/++/Xaa69p6NChlfaNiIhQjx49fN/zTruUef9Yr1699Pe//923XZ/X2xijl19+WWPHjlVMTEylfW1b71DV6rkd0hMr1RTqQ7Jz5szxtXm93nIfkl25cqWvz5dffmndQ5Pvvfeer23r1q1BPzSZnp4e8GmOiuzYscNIMps2bap2vZfLpc77gmPHjhm3222WLVtmjKm/611cXGxGjRplOnfubAoLC4P6Wk6u9w033GAmTJjg19axY8dKH5Lt2LGjX1tGRkbAg3QjRozw6zN8+HDrHpoMZd7GGLN8+XITGxtb5cOGF5SVlZnu3bubcePGXUqpl1V15n2xn//852bQoEG+7fq63sb88JDwjh07qvwaNq73BQryIdnaOrdrNKB8/vnnJi8vz8yaNctcccUVJi8vz+Tl5ZnTp0/7+rRv396sXr3atz179mzj8XjM6tWrzY4dO8zdd99d7seMW7Zsad555x2zfft2M3jwYOs+dvrTn/7U5OTkmJycHJOSkhLwsdOL522MMUVFRaZhw4ZmwYIFAWMeOHDAzJo1y2zbts3k5+ebtWvXmg4dOpiuXbvW2XmfPn3a/Pa3vzXZ2dkmPz/fbNiwwfTu3dtcffXV9Xq9S0pKzMiRI03Lli3Nhx9+6PfRQ6/Xa4yxb70vfPzypZdeMrt27TIPP/ywiYuL831aYdq0aWbs2LG+/hc+ivjII4+YXbt2mZdeeingo4j//e9/TWRkpJk9e7bZvXu3mT17trUfOw123suXLzdRUVFm3rx5FX48fObMmWbdunXmk08+MXl5eWbcuHEmKirKL+Q6LdR5z50716xZs8bs27fP7Ny500ybNs1IMqtWrfL1qY/rfcG9995revbsWe6Ytq/36dOnfX82SzJPP/20ycvL832i0Mlzu0YDSnp6upEU8NqwYcMPBUhmyZIlvu2ysjIzY8YM07x5c+N2u03//v0DUul3331nJk2aZJo2bWoaNGhgbr75ZnPw4MGanEpIjh8/bsaMGWMaNWpkGjVqZMaMGRPw8buL522MMS+++KJp0KBBub/r4uDBg6Z///6madOmJiYmxlxzzTXmN7/5TcDvDHFSqPP+9ttvTVpamrnqqqtMdHS0ad26tUlPTw9Yy/q23vn5+eWeFz8+N2xc73nz5pk2bdqYmJgY061bN78rOenp6WbAgAF+/Tdu3Gi6du1qYmJiTNu2bcsN3q+99ppp3769iY6ONh06dPD7A80Wocx7wIAB5a5renq6r8/DDz9sWrdubWJiYsxVV11l0tLSTHZ2di3OKDihzHvOnDnmmmuuMbGxsaZJkybmxhtvNGvXrg0Ys76ttzHfX+Vt0KCBWbhwYbnj2b7eF67+VPQ96+S57TLm/NMtAAAAlrDq96AAAABIBBQAAGAhAgoAALAOAQUAAFiHgAIAAKxDQAEAANYhoAAAAOsQUAAAgHUIKAAAwDoEFAAAYB0CCgAAsA4BBQAAWOf/AQEm9m4BkA+RAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in np.arange(4):  # 遍历矩阵 A 和 B 的列\n",
    "    C_i = A[:, [i]] @ B[[i], :]  # 计算 A 的第 i 列和 B 的第 i 行的外积\n",
    "    title = 'C' + str(i + 1)  # 设置子矩阵标题\n",
    "    plot_heatmap(C_i, title)  # 可视化子矩阵 C_i\n",
    "    C_rep = C_rep + C_i  # 将 C_i 加到 C_rep 中"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "06f5ff56-7974-4f77-9a24-45825b1299c7",
   "metadata": {},
   "source": [
    "## 可视化重建后的矩阵 C"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "baa2247b-6687-4e8b-8f78-6c7578f01045",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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r782derUMVOmTPH3sX29//73v5tf/vKXZsmSJUaSWbZsWan9q/LYrpL/WeC8efMCCigFBQUmPj7eTJ8+3d925swZExsba1588UVjzPc/EOHh4ebNN9/09/nXv/5lQkJCzKpVqy567eW1Y8cOI8mxEJmZmUaS2bVrV8DjDBgwwPTo0cPR1q1bNzNu3LiLVepFVdF5p6ammgEDBpS4P1jW+9NPPzWSHH8Q2rTe1157rRk9erSjLSkpyUyaNKnY/o899phJSkpytN1///2mY8eO/u3BgwebPn36OPrcfPPNZsiQIRep6gtX3nkXp1WrVmbatGn+7UD/PHRTeeddGFCOHTtW4pjBsN7Lli0zHo/HfPXVV/62S2G9CwUSUKry2LbqGpSsrCxlZ2erd+/e/jav16tu3bopIyNDkrRp0ybl5eU5+jRs2FDJycn+Pm7KzMxUbGysrrvuOn9bx44dFRsbG3B93377rVauXKn77ruvyL6FCxcqLi5OrVu31sSJE3Xy5MmLVvuFuJB5r127VvXr19eVV16pUaNG6fDhw/59wbDekpSbmyuPx1Pkq1Ab1vvs2bPatGmTYw0kqXfv3iXOMTMzs0j/m2++WRs3blReXl6pfWxYV6li8z5fQUGBTp48qTp16jja//3vfysxMVGNGzdW3759tWXLlotW94W6kHm3a9dOCQkJ6tmzp9LT0x37gmG9X331Vd10001KTEx0tNu83uVVlcd22IWVenFlZ2dLkho0aOBob9Cggfbv3+/vExERocsuu6xIn8LXuyk7O1v169cv0l6/fv2A61uwYIGio6P1v//7v472u+66S82aNVN8fLw+//xzTZ48WZ999plWr159UWq/EBWd9y233KKf/vSnSkxMVFZWln7961+rR48e2rRpk7xeb1Cs95kzZzRp0iQNGzbM8X8GtWW9jx49qvz8/GKPy5LmmJ2dXWz/c+fO6ejRo0pISCixjw3rKlVs3ud7+umnderUKQ0ePNjflpSUpPnz56tNmzY6ceKEnn32WV1//fX67LPPdMUVV1zUOVREReadkJCgOXPmKCUlRT6fT3/5y1/Us2dPrV27Vl27dpVU8s9EdVnvQ4cO6d1339WiRYsc7bavd3lV5bFd7oAydepUTZs2rdQ+GzZsUIcOHco7tJ/H43FsG2OKtJ0vkD4XItB5S0Xrl8pX39y5c3XXXXcpMjLS0T5q1Cj/fycnJ+uKK65Qhw4dtHnzZrVv3z6gscursud95513+v87OTlZHTp0UGJiolauXFkkoJVn3AtVVeudl5enIUOGqKCgQLNnz3bsc2O9S1Pe47K4/ue3V+RYr2oVrfGNN97Q1KlT9c477zhCbMeOHR0Xgl9//fVq3769nnvuOf35z3++eIVfoPLMu0WLFmrRooV/u1OnTvr666/1xz/+0R9QyjumWypa4/z581W7dm0NHDjQ0X6prHd5VNWxXe6AMnbs2DLvJGjatGl5h5UkxcfHS/o+oSUkJPjbDx8+7E9j8fHxOnv2rI4dO+b4V/Xhw4fVuXPnCr1vIAKd97Zt2/Ttt98W2XfkyJEiibI4H330kXbv3q3FixeX2bd9+/YKDw/X3r17K+0vrKqad6GEhAQlJiZq7969kqr3eufl5Wnw4MHKysrSmjVrHGdPilMV612cuLg4hYaGFvnXz4+Py/PFx8cX2z8sLEx169YttU95fl4qU0XmXWjx4sW677779NZbb+mmm24qtW9ISIiuueYa/8+82y5k3j/WsWNHvf766/7t6rzexhjNnTtXw4cPV0RERKl9bVvv8qrSY7tcV6xUUHkvkp0xY4a/zefzFXuR7OLFi/19vvnmG+sumvzkk0/8bevXrw/4osnU1NQid3OUZPv27UaSWbduXYXrvVgudN6Fjh49arxer1mwYIExpvqu99mzZ83AgQNN69atzeHDhwN6LzfX+9prrzVjxoxxtLVs2bLUi2RbtmzpaBs9enSRC+luueUWR58+ffpYd9FkeeZtjDGLFi0ykZGRZV5sWKigoMB06NDBjBw58kJKvagqMu/z3X777aZ79+7+7eq63sb89yLh7du3l/keNq53IQV4kWxVHduVGlD2799vtmzZYqZNm2Zq1apltmzZYrZs2WJOnjzp79OiRQuzdOlS//b06dNNbGysWbp0qdm+fbsZOnRosbcZN27c2Lz//vtm8+bNpkePHtbddnrVVVeZzMxMk5mZadq0aVPkttPz522MMbm5uSYqKsq88MILRcbct2+fmTZtmtmwYYPJysoyK1euNElJSaZdu3aX7LxPnjxpHnnkEZORkWGysrJMenq66dSpk2nUqFG1Xu+8vDzTv39/07hxY7N161bHrYc+n88YY996F95++eqrr5odO3aY8ePHm5o1a/rvVpg0aZIZPny4v3/hrYgPP/yw2bFjh3n11VeL3Ir4j3/8w4SGhprp06ebnTt3munTp1t722mg8160aJEJCwszs2bNKvH28KlTp5pVq1aZL7/80mzZssWMHDnShIWFOUKu28o772eeecYsW7bM7Nmzx3z++edm0qRJRpJZsmSJv091XO9Cd999t7nuuuuKHdP29T558qT/72ZJZubMmWbLli3+OwrdPLYrNaCkpqYaSUUe6enp/y1AMvPmzfNvFxQUmClTppj4+Hjj9XpN165di6TS06dPm7Fjx5o6deqYGjVqmL59+5oDBw5U5lTKJScnx9x1110mOjraREdHm7vuuqvI7Xfnz9sYY1566SVTo0aNYn/XxYEDB0zXrl1NnTp1TEREhGnevLl56KGHivzOEDeVd97/+c9/TO/evU29evVMeHi4adKkiUlNTS2yltVtvbOysoo9Ln58bNi43rNmzTKJiYkmIiLCtG/f3nEmJzU11XTr1s3Rf+3ataZdu3YmIiLCNG3atNjg/dZbb5kWLVqY8PBwk5SU5PgLzRblmXe3bt2KXdfU1FR/n/Hjx5smTZqYiIgIU69ePdO7d2+TkZFRhTMKTHnmPWPGDNO8eXMTGRlpLrvsMnPDDTeYlStXFhmzuq23Md+f5a1Ro4aZM2dOsePZvt6FZ39K+pl189j2GPPD1S0AAACWsOr3oAAAAEgEFAAAYCECCgAAsA4BBQAAWIeAAgAArENAAQAA1iGgAAAA6xBQAACAdQgoAADAOgQUAABgHQIKAACwDgEFAABY5/8Bm8aFaMh673sAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_heatmap(C_rep, 'C reproduced')  # 可视化重建的矩阵 C_rep"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "85a80909-2aac-49ed-bb7a-f8cc6b80ee7d",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "ecd322f4-f919-4be2-adc3-69d28ef25e69",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
